package org.gwt.client.vista.figuras;

import org.vaadin.gwtgraphics.client.Group;
import org.vaadin.gwtgraphics.client.Line;

import com.google.gwt.user.client.Window;

public class Vector {
	private Group punta;
	private Line l,l1,l2;
	private int x,y,ancho;
	private String color;
	private double opacidad;
	private boolean navegador;

	public Vector(boolean nav) {
		setNavegador(nav);
		this.ancho=3;
		setColor("black");
		opacidad=1;
		}
	public void setOpacidad(double opc){
		this.opacidad=opc;
	}
	public void setNavegador(boolean nav) {
		this.navegador=nav;
		}
	public void setColor(String color){
		this.color=color;
		}
	public void setAncho(int ancho){
		this.ancho=ancho;
	}
	public double angulo(final int x1,final int y1,final int x2,final int y2){
		int x_=x2-x1;
		int y_=-(y2-y1);
		double grados=Math.toDegrees(Math.atan((double)y_/(double)x_));
		return grados;
		}
	public int distanciaX(final int x1,final int x2){
		return navegador?x2-x1:x2;
	}
	public int distanciaY(final int y1,final int y2){
		return navegador?y2-y1:y2;
		}

	public int[] puntosVector(final int x1,final int y1,final int x2,final int y2){
		double tx,ty;
		double ang,angsep;
		int  dist=10;
		int []p=new int[4];
		ty=-(y1-y2)*1.0;
	    tx=(x1-x2)*1.0;
	    ang=Math.atan (ty/tx);
	    if(tx<0)	ang+=Math.PI;
	    angsep=35.0;
	    p[0]=(int)(x2+dist*Math.cos (ang-Math.toRadians (angsep)));
		p[1]=(int)(y2-dist*Math.sin (ang-Math.toRadians (angsep)));
		p[2]=(int)(x2+dist*Math.cos (ang+Math.toRadians (angsep)));
		p[3]=(int)(y2-dist*Math.sin (ang+Math.toRadians (angsep)));
		p[0]=distanciaX(x2, p[0]);
		p[1]=distanciaX(y2, p[1]);
		p[2]=distanciaX(x2, p[2]);
		p[3]=distanciaX(y2, p[3]);
		return p;
	}
	public Group dibujar(final int x1,final int y1,final int x2,final int y2){
		int []p;
		punta=new Group();
		x=distanciaX(x1, x2);
		y=distanciaY(y1, y2);
		p=puntosVector(x1,y1,x2,y2);
		l=new Line(x1, y1, x, y);
		l1=new Line(x2, y2, p[0], p[1]);
		l2=new Line(x2, y2, p[2], p[3]);
		l.setStrokeWidth(ancho);
		l1.setStrokeWidth(ancho-1);
		l2.setStrokeWidth(ancho-1);
		l.setStrokeColor(color);
		l1.setStrokeColor(color);
		l2.setStrokeColor(color);
		l.setStrokeOpacity(opacidad);
		l1.setStrokeOpacity(opacidad);
		l2.setStrokeOpacity(opacidad);
		punta.add(l);
		punta.add(l1);
		punta.add(l2);		
		return punta;		
		}

}
